// author: Shelman
// description: 封装、定义的一些全局的数据变量等
#pragma once


#include <iostream>
#include <string>
#include <functional>

#include <stdint.h>


// 默认Socket每次接收多少数据
#define RECVDATA_DEFAULT_SIZE   (5 * 1024)

// 通信头标识长度
#define COMM_HEADER_LEN     (4)
// 通信尾标识长度
#define COMM_TAILER_LEN     (2)

static const char* const __COMM_HEADER = "YYHH"; // 通信头标识
static const char* const __COMM_TAILER = "YH"; // 通信尾标识



// 通信命令
enum class CommCmd : uint8_t {
    CMD_NONE = 0xFF, // 无效的命令

    REQ_REBOOT = 0x00, // 重启请求
    REQ_REGISTER = 0x01, // 注册请求
    REQ_ACTIVE = 0x02, // 激活请求

    RSP_REBOOT = 0x80, // 重启应答
    RSP_REGISTER = 0x81, // 注册应答
    RSP_ACTIVE = 0x82, // 激活应答
};

// 网络连接信息
struct NetworkConnInfo {
    uint16_t ui16Port = 0; // 服务端口
    std::string strIP = ""; // 服务IPv4地址
};

// 业务数据信息
struct BussinessDataInfo {
    CommCmd eCmd = CommCmd::CMD_NONE; // 命令码
    uint8_t ui8Status = 0; // 状态码，0：异常，1：正常
    std::string data = ""; // 业务数据内容
};

// 数据接收回调函数类型定义，strData：数据，fd：通信句柄
typedef std::function<void(const std::string &strData, int fd)> DataReceivedCallback;
// 数据接收回调函数类型定义，strData：数据，stConnInfo：远端的的连接信息
typedef std::function<void(const std::string &strData, const NetworkConnInfo &stConnInfo)> UdpDataReceivedCallback;


